package day05;

/*
门Door：抽象类，
        属性：位置location
        行为：有开门open、关门close两个抽象方法，有构造方法（设置位置属性）。
普通门CommonDoor：从门继承继承，实现了open、close方法。

警报Alarm：接口，有报警alarm的方法。
Usb：接口，有service的方法。

警报门AlarmDoor：从门继承，实现了open、close方法。
                 同时有警报的功能，实现了alarm的方法。
                 同时有Usb的功能，通过Usb口对门充电。
 */
public class Demo03 {
    public static void main(String[] args) {
        CommonDoor commonDoor = new CommonDoor("卧室门");
        commonDoor.close();
        commonDoor.open();

        AlarmDoor alarmDoor = new AlarmDoor("大门");
        alarmDoor.open();
        alarmDoor.close();
        alarmDoor.service();
        alarmDoor.alarm();
    }
}

abstract class Door {
    String location;

    public Door(String location) {
        this.location = location;
    }

    public abstract void open();

    public abstract void close();
}

interface Alarm {
    void alarm();
}

interface Usb {
    void service();
}

class CommonDoor extends Door {
    public CommonDoor(String location) {
        super(location);
    }

    @Override
    public void open() {
        System.out.println(location + "一推就开");
    }

    @Override
    public void close() {
        System.out.println(location + "一推就关");
    }
}

class AlarmDoor extends Door implements Alarm, Usb {
    public AlarmDoor(String location) {
        super(location);
    }

    @Override
    public void open() {
        System.out.println(location + "指纹校验成功，打开门");
    }

    @Override
    public void close() {
        System.out.println(location + "已关闭，并上三道锁。");
    }

    @Override
    public void alarm() {
        System.out.println(location + "报警：陌生人靠近");
    }

    @Override
    public void service() {
        System.out.println(location + "连接Usb口充电");
    }
}
